mlpfandomcom_ru-20200216-history
Модуль:Навбокс
local navBox = {} function navBox.navBoxCharactersCreate(frame) local args = frame.args --десеаризаця аргументов --второстепенные персонажи local sck = 1 local supportingCharactersTable = {} while argsперсонажи раздел '..sck..' название' and argsперсонажи раздел '..sck do supportingCharactersTablesck = {} supportingCharactersTablesck1 = argsперсонажи раздел '..sck..' название' supportingCharactersTablesck2 = navBox.tools.split(argsперсонажи раздел '..sck, ',%s?', true) sck = sck + 1 end --фоновые персонажи local backgroundCharactersTable = backgroundCharactersTable11 = 'Земные пони 20px|link=Земные пони' backgroundCharactersTable12 = navBox.tools.split(argsземные пони', ',') backgroundCharactersTable21 = 'Пегасы 20px|link=Пегасы' backgroundCharactersTable22 = navBox.tools.split(argsпегасы', ',') backgroundCharactersTable31 = 'Единороги 20px|link=Единороги' backgroundCharactersTable32 = navBox.tools.split(argsединороги', ',') --подготовка элементов --основа local nBox = navBox.build.mainBoxCreate() --главные персонажи local mainCharacters = navBox.build.mainCharactersCreate() --второстепенные персонажи local supportingData = {'Второстепенные персонажи', 'mw-customcollapsible-supportingCharacters', 'mw-customtoggle-supportingCharacters' } local supportingCharacters = navBox.build.sectionCreate(supportingData, supportingCharactersTable) --фоновые персонажи local backgroundData = {'Фоновые персонажи', 'mw-customcollapsible-backgroundCharacters', 'mw-customtoggle-backgroundCharacters' } backgroundCharacters = navBox.build.sectionCreate(backgroundData, backgroundCharactersTable) --построение шаблона --главные персонажи nBox:node(mainCharacters) --второтсепенные персонажи if supportingCharacters then nBox:node(supportingCharacters) end --фоновые персонажи if backgroundCharacters then nBox:node(backgroundCharacters) end return nBox end function navBox.navBoxCreate(frame) local args = frame.args local mk = 1 local nBox = navBox.build.mainBoxCreate() while args'..mk do --десеаризаця аргументов local sk = 1 local sectionsTable = {} while args'..mk..':'..sk do sectionsTablesk = {} sectionsTablesk1 = args'..mk..':'..sk..' название' sectionsTablesk2 = navBox.tools.split(args'..mk..':'..sk, ',%s?', true) sk = sk + 1 end local colID if (argsсворачивания '..mk) then colID = argsсворачивания '..mk else colID = 'collaps' end local pattern if (argsссылок') then pattern = argsссылок' else pattern = argsссылок '..mk end --подготовка элементов --тело навбокса local data = {args'..mk, 'mw-customcollapsible-'..colID, 'mw-customtoggle-'..colID, pattern } body = navBox.build.sectionCreate(data, sectionsTable) --построение if body then nBox:node(body) end mk = mk + 1 end return nBox end --создание элементов navBox.build = {} --основа function navBox.build.mainBoxCreate() local mainBox = mw.html.create('div') mainBox:addClass('navBoxOuter') return mainBox end --главные персонажи function navBox.build.mainCharactersCreate() local content = , , , , , } local table = navBox.build.auxiliary.collapsibleTableCreate('Главные персонажи', 'mw-customtoggle-leadingCharacters') table:attr('id', 'mw-customcollapsible-leadingCharacters') local topLine = mw.html.create('tr') local bottomLine = mw.html.create('tr') bottomLine:css('font-size', '13px') for i = 1, #content do local topTd = mw.html.create('td') local bottomTd = mw.html.create('td') for j = 1, #contenti do topTd:wikitext('[[Файл:'..contentij1..'.png|link='..contentij2..'|'..contentij2..']]') bottomTd:wikitext('[['..contentij2..']] ') end topLine:node(topTd) bottomLine:node(bottomTd) end table:node(topLine) table:node(bottomLine) return table end --создание секции function navBox.build.sectionCreate(data, content) local table = navBox.build.auxiliary.collapsibleTableCreate(data1, data3) table:attr('id', data2) for i = 1, #content do local text = '' local k = 1 for j = 1, #contenti2 do if (string.sub(contenti2j, contenti2j:len() - 1, -1) '!@' and contenti2+ 1) then contenti2+ 1 = '1' k = k + 1 else if j ~= k then text = text..' • ' end if (string.sub(contenti2j, 1, 2) '!l') then text = text..string.sub(contenti2j, 3, contenti2j:len()) else if (string.sub(contenti2j, 1, 2) '!p') then text = text..'[['..string.sub(contenti2j, 3, contenti2j:len())..']]' elseif (data4) then local txt = string.gsub(data4, '{s}', contenti2j) text = text..''..txt..'' else text = text..'[['..contenti2j..']]' end end end end local line = navBox.build.auxiliary.lineCreate(contenti1, text) table:node(line) end return table end --вспомогательные функции navBox.build.auxiliary = {} --создание пустой сворачивающейся таблицы с заголовком function navBox.build.auxiliary.collapsibleTableCreate(label, class) local table = mw.html.create('table') table:addClass('mw-collapsible mw-collapsed') table:attr('title', 'Показать/Скрыть список') local headerLine = mw.html.create("tr") local header = mw.html.create("td") header:addClass(class..' gradient') header:attr('colspan', '6') header:wikitext(label) headerLine:node(header) table:node(headerLine) return table end --создание строки таблицы function navBox.build.auxiliary.lineCreate(title, text) local line = mw.html.create("tr") local rightColumn = mw.html.create("td") local leftColumn if (title) then leftColumn = mw.html.create("th") leftColumn:addClass('colorlink') leftColumn:wikitext(title) line:node(leftColumn) else rightColumn:attr('colspan', '2') end rightColumn:wikitext(text) line:node(rightColumn) return line end --служебные функции navBox.tools = {} --Краткое описание: Возвращает таблицу, содержащую подстроки строки "str", разделенные элементами строки "separator". Если "reg" - истина, то "separator" вместо строки принимает образец. Несколько сепараторов подряд рассматриваются как один. Если "str" "separator" то возвращается пустой массив.-- function navBox.tools.split(str, separator, reg) local result = {} --Проверка строки if(not str or type(str) ~= 'string' or #str 0) then result1 = 'Ошибка 1' result2 = 'Проверь параметр "str"' result3 = 1 return result end --проверка сепаратора if (not separator or type(separator) ~= 'string' or #separator 0) then result1 = 'Ошибка 2' result2 = 'Проверь параметр "separator"' result3 = 2 return result end --Проверка на образец if (not reg) then regExp = true else regExp = false end --переменные позиций local n local k --управляющие переменные local s = 0 local i = 1 --главный цикл while k ~= str:len() do --поиск сепаратора local substring n, k = string.find(str, separator, s + 1, regExp) --если поиск не дал результатов if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end substring = string.sub(str, s + 1, n - 1) --добавление результата if substring ~= "" then resulti = substring i = i + 1 end s = k end return result end return navBox